package com.yuanzi.base.redis;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.yuanzi.base.annotation.RedisCache;

/**
 * redis相关工具类
 * @author chengshx
 * @date 2017年5月9日
 */
@Component
public class RedisUtils {
	
	public static String PREFIX;
	public static String SEPARATOR = ":";

	@Value("${spring.application.name}")
	public void setPrefix(String prefix) {
		PREFIX = prefix + SEPARATOR;
	}

	/**
	 * 获取String类型实体的缓存key
	 * @author chengshx
	 * @param clazz 实体类
	 * @param key id或其他key
	 * @return
	 */
	public static String getStringKey(Class<?> clazz, String key) {
		return PREFIX + clazz.getSimpleName() + SEPARATOR + key;
	}
	
	/**
	 * 获取其他微服务String类型实体的缓存key
	 * @author chengshx
	 * @date 2017年6月15日
	 *
	 * @param serviceName 微服务名称
	 * @param clazz 实体类
	 * @param key id或其他key
	 * @return
	 */
	public static String getStringKey(String serviceName, Class<?> clazz, String key) {
		return serviceName + SEPARATOR + clazz.getSimpleName() + SEPARATOR + key;
	}
	
	/**
	 * 获取String类型自定义缓存key
	 * @author chengshx
	 * @param className 自定义缓存名称
	 * @param key id或其他key
	 * @return
	 */
	public static String getStringKey(String className, String key) {
		return PREFIX + className + SEPARATOR + key;
	}
	
	/**
	 * 获取其他微服务String类型自定义缓存key
	 * @author chengshx
	 * @param serviceName 微服务名称
	 * @param className 自定义缓存名称
	 * @param key id或其他key
	 * @return
	 */
	public static String getStringKey(String serviceName, String className, String key) {
		return serviceName + SEPARATOR + className + SEPARATOR + key;
	}
	
	/**
	 * 获取hash类型实体的缓存key
	 * @author chengshx
	 * @param clazz 实体类
	 * @return
	 */
	public static String getHashKey(Class<?> clazz) {
		return PREFIX + clazz.getSimpleName();
	}
	
	/**
	 * 获取其他微服务hash类型实体的缓存key
	 * @author chengshx
	 * @param clazz 实体类
	 * @param className 自定义缓存名称
	 * @return
	 */
	public static String getHashKey(String serviceName, Class<?> clazz) {
		return serviceName + SEPARATOR + clazz.getSimpleName();
	}
	
	/**
	 * 获取其他微服务Hash类型自定义缓存key
	 * @author chengshx
	 * @param serviceName 微服务名称
	 * @param className 自定义缓存名称
	 * @param key id或其他key
	 * @return
	 */
	public static String getHashKey(String serviceName, String className, String key) {
		return serviceName + SEPARATOR + className + SEPARATOR + key;
	}
	
	/**
	 * 获取hash类型自定义缓存key
	 * @author chengshx
	 * @param className 自定义缓存名称
	 * @return
	 */
	public static String getHashKey(String className) {
		return PREFIX + className;
	}
	
	/**
	 * 获取其他微服务hash类型自定义缓存key
	 * @author chengshx
	 * @param clazz 实体类
	 * @param className 自定义缓存名称
	 * @return
	 */
	public static String getHashKey(String serviceName, String className) {
		return serviceName + SEPARATOR + className;
	}
	
	public static String getGroupKeyPrefix() {
		return SEPARATOR+RedisCache.ActionType.ADD_GROUP.name();
	}
	
	/**
	 * 获取set类型实体的缓存key
	 * @author chengshx
	 * @date 2017年12月25日
	 *
	 * @param clazz 实体类
	 * @return
	 */
	public static String getSetKey(Class<?> clazz) {
		return PREFIX + clazz.getSimpleName();
	}
	
	/**
	 * 获取String类型自定义缓存key
	 * @author chengshx
	 * @param className 自定义缓存名称
	 * @return
	 */
	public static String getSetKey(String className) {
		return PREFIX + className;
	}
	
}
